package com.mmq.ets.visuel;
/******************************************************
Cours:  LOG121
Projet: Squelette du laboratoire #1
Nom du fichier: FenetreFormes.java
Date créé: 2013-05-03
*******************************************************
Historique des modifications
*******************************************************
*@author Patrice Boucher
2013-05-03 Version initiale
*******************************************************/  

import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JComponent;

import com.mmq.ets.modele.AbstractForme;
import com.mmq.ets.modele.GestionaireFormes;
import com.mmq.ets.util.ListeChainee;

/**
 * Cette fenêtre gère l'affichage des formes 
 * @author Patrice Boucher
 * @date 2013/05/04
 */
public class FenetreFormes extends JComponent implements Observer 
{
	
	private static final long serialVersionUID = -2262235643903749505L;
	public static final int WIDTH = 500;
	public static final int HEIGHT = 500;
	public static final Dimension DIMENSION = new Dimension(500,500);
	private ListeChainee<AbstractForme> listeFormes;
	/**
	 * Constructeur
	 */
	public FenetreFormes()
	{
		//... 
	}
	/*
	 * Affiche la liste de formes 
	 */
	/**
	 * paintComponent dessine les figures en utilisant la méthode dessinerFormes
	 */
	@Override 
	public void paintComponent(Graphics g)
	{
		this.dessinerFormes(g);
	}
	/**
	 * dessinerFormes dessine les formes enregistrées du gestionnaire de forme.
	 * @param g 
	 * @see Graphics
	 * @see GestionaireFormes
	 */
	private void dessinerFormes(Graphics g)
	{
		if(listeFormes!=null)
		{
			for(AbstractForme elementForme : listeFormes)
			{
				if (elementForme!=null)
				{
					elementForme.dessinerForme(g);
				}
			}
		}		
	}	
	/*
	 * Le Layout qui utilise (contient) FenetreFormes doit réserver 
	 * l'espace nécessaire à son affichage
	 */
	@Override 
	public Dimension getPreferredSize(){
		return DIMENSION;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void update(Observable o, Object arg) 
	{		
		if(arg instanceof ListeChainee)
		{
			listeFormes=(ListeChainee<AbstractForme>)arg;
			this.repaint();
			
		}
	}

	
}
